/**
 * 环境管理器 - 管理场景环境(环境光、环境模型)
 * 注意：天空盒功能已迁移到 UnityStyleSkyboxManager
 */

import * as THREE from 'three';

export class EnvironmentManager {
    constructor(scene, projectId, sceneId) {
        this.scene = scene; // THREE.Scene
        this.projectId = projectId;
        this.sceneId = sceneId;
        
        // 环境配置（仅保留环境光和环境模型）
        this.config = {
            environmentModel: null, // 环境模型配置
            ambientLight: {
                enabled: true,
                intensity: 0.5,
                color: '#ffffff'
            }
        };
        
        // 环境对象引用
        this.ambientLightObject = null; // 环境光对象
        this.environmentModelObject = null; // 环境模型对象
        
        this.initialized = false;
    }
    
    /**
     * 初始化环境管理器
     */
    async initialize() {
        console.log('🌍 初始化环境管理器...');
        
        // 加载环境配置
        await this.loadConfig();
        
        // 应用环境配置
        await this.applyConfig();
        
        this.initialized = true;
        console.log('✅ 环境管理器初始化完成');
    }
    
    /**
     * 从服务器加载环境配置
     */
    async loadConfig() {
        try {
            const response = await fetch(`/api/projects/${this.projectId}/scenes/${this.sceneId}/environment`);
            
            if (response.ok) {
                const data = await response.json();
                this.config = { ...this.config, ...data };
                console.log('📥 环境配置加载成功:', this.config);
            } else if (response.status === 404) {
                console.log('📝 使用默认环境配置');
            } else {
                console.warn('⚠️ 加载环境配置失败，使用默认配置');
            }
        } catch (error) {
            console.error('❌ 加载环境配置异常:', error);
        }
    }
    
    /**
     * 保存环境配置到服务器
     */
    async saveConfig() {
        try {
            const response = await fetch(
                `/api/projects/${this.projectId}/scenes/${this.sceneId}/environment`,
                {
                    method: 'POST',
                    headers: { 'Content-Type': 'application/json' },
                    body: JSON.stringify(this.config)
                }
            );
            
            if (response.ok) {
                console.log('✅ 环境配置保存成功');
                return true;
            } else {
                console.error('❌ 保存环境配置失败');
                return false;
            }
        } catch (error) {
            console.error('❌ 保存环境配置异常:', error);
            return false;
        }
    }
    
    /**
     * 应用环境配置到场景
     */
    async applyConfig() {
        // 应用环境光
        await this.applyAmbientLight();
        
        console.log('✅ 环境配置已应用到场景');
    }
    
    /**
     * 应用环境光
     */
    async applyAmbientLight() {
        const config = this.config.ambientLight;
        
        // 移除旧的环境光
        if (this.ambientLightObject) {
            this.scene.remove(this.ambientLightObject);
            this.ambientLightObject = null;
        }
        
        if (!config.enabled) {
            console.log('📝 环境光已禁用');
            return;
        }
        
        // 创建新的环境光
        const ambientLight = new THREE.AmbientLight(config.color, config.intensity);
        ambientLight.name = '环境光';
        ambientLight.userData.isEnvironmentLight = true;
        
        this.scene.add(ambientLight);
        this.ambientLightObject = ambientLight;
        
        console.log(`✅ 环境光已应用: 颜色=${config.color}, 强度=${config.intensity}`);
    }
    
    
    /**
     * 更新环境光配置
     */
    updateAmbientLight({ enabled, intensity, color }) {
        if (enabled !== undefined) {
            this.config.ambientLight.enabled = enabled;
        }
        if (intensity !== undefined) {
            this.config.ambientLight.intensity = intensity;
        }
        if (color !== undefined) {
            this.config.ambientLight.color = color;
        }
        
        this.applyAmbientLight();
    }
    
    
    /**
     * 获取当前环境配置
     */
    getConfig() {
        return { ...this.config };
    }
    
    /**
     * 销毁环境管理器
     */
    dispose() {
        // 清理环境光
        if (this.ambientLightObject) {
            this.scene.remove(this.ambientLightObject);
            this.ambientLightObject = null;
        }
        
        // 清理环境模型
        if (this.environmentModelObject) {
            this.scene.remove(this.environmentModelObject);
            this.environmentModelObject = null;
        }
        
        console.log('🧹 环境管理器已销毁');
    }
}

export default EnvironmentManager;

